﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Business;


namespace Follow.Cadastros
{
    public partial class CadastroProposta : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["idUsuario"] == null)
                {
                    Response.Redirect("../Default.aspx");
                }
                else
                {
                    Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                    bool possuiPermissao = valida.validaPermissaoPorTela("Proposta", Convert.ToInt32(Session["idGrupoUsuario"]));

                    if (possuiPermissao == false)
                    {
                        Response.Redirect("../permissaoNegada.aspx");
                    }
                    else
                    {
                        if ((!string.IsNullOrEmpty(Request.QueryString["idFollowUp"])) && (!string.IsNullOrEmpty(Request.QueryString["idProposta"])))
                        {
                            Title = "Alterar Proposta";
                            int idFollowUp = Convert.ToInt32(Request.QueryString["idFollowUp"]);
                            int idProposta = Convert.ToInt32(Request.QueryString["idProposta"]);

                            ViewFollowBO bo = new ViewFollowBO();
                            Model.ViewFollowUp cls = new Model.ViewFollowUp();

                            cls = bo.findByIDProposta(idProposta.ToString());

                            if (!string.IsNullOrEmpty(cls.NomeCliente))
                            {
                                acaoProposta.Value = "UPDATE";
                                txtCNPJ.Text = cls.CNPJCliente;
                                txtObservacao.Text = cls.ObservacoesFollow;
                                txtPrazoEntrega.Text = cls.PrazoEntrega;
                                txtDesconto.Text = cls.Desconto.ToString();

                                IdProposta.Value = idProposta.ToString();

                                ClienteBO boCliente = new ClienteBO();

                                Model.Cliente clsCliente = new Model.Cliente();

                                clsCliente = boCliente.findByCnpj(txtCNPJ.Text);

                                if (!string.IsNullOrEmpty(clsCliente.Nome))
                                {
                                    lblNomeCliente.Text = clsCliente.Nome;
                                    lblLocalidade.Text = clsCliente.Cidade + "/" + clsCliente.Estado.ToUpper();
                                    IDCliente.Value = clsCliente.IDCliente.ToString();
                                }
                            }
                            Title = "Incluir Proposta";
                        }
                    }
                }
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            ClienteBO bo = new ClienteBO();

            Model.Cliente cls = new Model.Cliente();

            cls = bo.findByCnpj(txtCNPJ.Text);

            if (!string.IsNullOrEmpty(cls.Nome))
            {
                lblNomeCliente.Text = cls.Nome;
                lblLocalidade.Text = cls.Cidade + "/" + cls.Estado.ToUpper();
                IDCliente.Value = cls.IDCliente.ToString();
            }
        }

        protected void btnIncluirItens_Click(object sender, EventArgs e)
        {
            
            if (acaoProposta.Value == "UPDATE")
            {

                Model.Proposta p = new Model.Proposta();
                PropostaBO bo = new PropostaBO();
                if (IDCliente.Value != "")
                {
                    p.IDCliente = Int32.Parse(IDCliente.Value);
                }

                p.DataProposta = DateTime.Now;
                p.Desconto = Convert.ToDouble(txtDesconto.Text);

                Model.Funcionario funcionario = new Model.Funcionario();
                FuncionarioBO boFuncionario = new FuncionarioBO();

                funcionario = boFuncionario.findByIdUsuario(Convert.ToInt32(Session["idUsuario"]));

                p.IDFuncionario = funcionario.IDFuncionario;
                p.ObsProposta = txtObservacao.Text;
                p.PrazoEntrega = txtPrazoEntrega.Text;
                p.ValorTotal = 0;

                p.IDProposta = Convert.ToInt32(IdProposta.Value);

                bo.updateProposta(p, Convert.ToInt32(Session["idUsuario"]));

                PopulaItensProposta(p.IDProposta);


                PopulaProdutos();

                mvProposta.ActiveViewIndex = 1;
                Title = "Incluir Itens";
            }
            else
            {
                try
                {
                    Model.Proposta p = new Model.Proposta();
                    PropostaBO bo = new PropostaBO();
                    if (IDCliente.Value != "")
                    {
                        p.IDCliente = Int32.Parse(IDCliente.Value);
                    }

                    p.DataProposta = DateTime.Now;
                    p.Desconto = 0;

                    Model.Funcionario funcionario = new Model.Funcionario();
                    FuncionarioBO boFuncionario = new FuncionarioBO();

                    funcionario = boFuncionario.findByIdUsuario(Convert.ToInt32(Session["idUsuario"]));

                    p.IDFuncionario = funcionario.IDFuncionario;
                    p.ObsProposta = txtObservacao.Text;
                    p.PrazoEntrega = txtPrazoEntrega.Text;
                    p.ValorTotal = 0;

                    int idProposta = bo.save(p, Convert.ToInt32(Session["idUsuario"]));

                    IdProposta.Value = idProposta.ToString();


                    FollowUpBO followBO = new FollowUpBO();
                    Model.FollowUp follow = new Model.FollowUp();

                    follow.IDFuncionario = funcionario.IDFuncionario;
                    follow.IDProposta = idProposta;
                    follow.IDStatus = 1; // NOVA
                    follow.ObsFollowUp = "";
                    follow.DataFollowUp = DateTime.Now;

                    followBO.save(follow, Convert.ToInt32(Session["idUsuario"]));
                    PopulaProdutos();

                    mvProposta.ActiveViewIndex = 1;
                    Title = "Incluir Itens";
                }

                catch (Exception ex)
                {
                    lblMessageClienteObrigatorio.Visible = true;
                    if (ex.Message.IndexOf("idcliente") > -1)
                    {
                        lblMessageClienteObrigatorio.Text = "Cliente não selecionado";
                    }
                    else
                    {
                        lblMessageClienteObrigatorio.Text = ex.Message;
                    }
                }
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Cadastros/FollowUp.aspx");
        }

        protected void btnSalvarItem_Click(object sender, EventArgs e)
        {
            divMsg2.Visible = false;
            Model.ItemProposta ip = new Model.ItemProposta();
            ItemPropostaBO bo = new ItemPropostaBO();
            if (IdProposta.Value != "")
            {
                ip.IDProposta = Int32.Parse(IdProposta.Value);
                ip.IDProduto = Convert.ToInt32(ddlProdutos.SelectedValue);
                ip.Qtde = Convert.ToInt32(txtQuantidade.Text);
                ip.ValorUnit = Convert.ToDecimal(txtValor.Text);

                bo.save(ip, Convert.ToInt32(Session["idUsuario"]));
                ddlProdutos.SelectedIndex = 0;
                txtQuantidade.Text.Equals(string.Empty);
                txtValor.Text.Equals(string.Empty);

                PopulaItensProposta(Int32.Parse(IdProposta.Value));
            }
        }

        protected void ddlProdutos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlProdutos.SelectedIndex > 0)
            {
                ProdutoBO bo = new ProdutoBO();
                Model.Produto cls = new Model.Produto();

                cls = bo.load(Convert.ToInt32(ddlProdutos.SelectedValue));

                if (!string.IsNullOrEmpty(cls.Nome))
                {
                    lblDescricaoProduto.Text = cls.Descricao;
                    txtValor.Text = cls.Custo.ToString();
                }
            }
        }

        private void PopulaProdutos()
        {
            ProdutoBO bo = new ProdutoBO();

            ddlProdutos.DataSource = bo.findAll();
            ddlProdutos.DataTextField = "nome";
            ddlProdutos.DataValueField = "idproduto";
            ddlProdutos.DataBind();

            ddlProdutos.Items.Insert(0, "Selecione..");
        }

        private void PopulaItensProposta(int idProposta)
        {
            ItemPropostaBO bo = new ItemPropostaBO();
            gvItensProposta.DataSource = bo.findByProposta(idProposta);
            gvItensProposta.DataBind();
        }

        protected void btnAvancar_Click(object sender, EventArgs e)
        {
            if (gvItensProposta.Rows.Count > 0)
            {
                ItemPropostaBO bo = new ItemPropostaBO();
                IList<Model.ItemProposta> lista = new List<Model.ItemProposta>();
                lista = bo.findByProposta(Convert.ToInt32(IdProposta.Value));

                decimal valorTotal = 0;
                foreach (Model.ItemProposta item in lista)
                {
                    valorTotal += item.ValorUnit * item.Qtde;
                }
                lblValorProposta.Text = valorTotal.ToString();

                mvProposta.ActiveViewIndex = 2;
                Title = "Incluir Desconto";
            }
            else
            {
                divMsg2.Visible = true;
                divMsg2.Attributes["class"] = "isa_warning";
                lblMsg2.Text = "Pelo menos um produto deve ser inserido na proposta.";
            }
        }

        protected void btnConcluirProposta_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Cadastros/FollowUp.aspx");
        }

        protected void gvItensProposta_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int idItemProposta = Convert.ToInt32(gvItensProposta.DataKeys[e.RowIndex].Value);
            ItemPropostaBO bo = new ItemPropostaBO();
            bo.delete(idItemProposta, Convert.ToInt32(Session["idGrupoUsuario"]));

            PopulaItensProposta(Convert.ToInt32(IdProposta.Value));
        }

        protected void btnAvancar2_Click(object sender, EventArgs e)
        {
            PropostaBO boProposta = new PropostaBO();
            boProposta.update(Convert.ToInt32(IdProposta.Value), Convert.ToDouble(lblValorProposta.Text), Convert.ToDouble(txtDesconto.Text), Convert.ToInt32(Session["idGrupoUsuario"]));


            Model.ViewFollowUp cls = new Model.ViewFollowUp();
            Business.ViewFollowBO bo = new Business.ViewFollowBO();

            cls = bo.findByIDProposta(Convert.ToString(IdProposta.Value));

            if (!string.IsNullOrEmpty(cls.NomeCliente))
            {
                lblCNPJ.Text = cls.CNPJCliente;
                lblNomeCliente2.Text = cls.NomeCliente;
                lblNomeFuncionario.Text = cls.NomeFuncionario;

                lblObservacao.Text = cls.ObservacoesFollow;
                lblPrazoEntrega.Text = cls.PrazoEntrega;
                lblValorDesconto.Text = cls.Desconto.ToString();
                lblDataProposta.Text = cls.DataProposta.ToShortDateString();

                Business.ItemPropostaBO boItens = new Business.ItemPropostaBO();
                IList<Model.ItemProposta> lista = new List<Model.ItemProposta>();
                lista = boItens.findByProposta(cls.IDProposta);

                gvItens.DataSource = lista;
                gvItens.DataBind();
                
                lblValorFinal.Text = (cls.ValorTotal - cls.Desconto).ToString();
            }

            mvProposta.ActiveViewIndex = 3;
            Title = "Resumo da Proposta";
        }
    }
}